Apache i hostowanie stron www

Apache jest jednym z najpopularniejszych i potężnych serwerów internetowych dostępnych obecnie. Znany z niezawodności, skalowalności i szerokiej gamy funkcji, Apache jest często wybierany jako narzędzie do hostowania stron internetowych, aplikacji internetowych i usług sieciowych.

W tym tutorialu przyjrzymy się podstawowym koncepcjom i funkcjom serwera Apache oraz dowiemy się, jak go skonfigurować i uruchomić na swoim serwerze Ubuntu.

Pierwszym krokiem jest instalacja, wykonujemy ją za pomocą komendy:
      sudo apt install apache2
Po wpisaniu tej komendy i poprawnej instalacji voilà mamy zainstalowanego Apacha.

Teraz omówię jak co i jak.
Twoją gotową stronę internetową umieszczasz w katalogu /var/www/html
      cd /var/www/html
Natomiast to nie wszystko, w tym katalogu możesz mieć wiele stron www np. ../html/strona1 ../html/strona2 itp.
Aby serwer poprawnie przekierował do odpowiedniego katalogu po wpisaniu odpowiedniego linku musisz ustawić tak zwane virtualhost-y.

Dla przykładu przyjmijmy że masz serwer w sieci lokalnej po adresem:
 - 192.168.0.10 
oraz ma on DNS który ma podpięte dwie domeny które przekierowują na samego siebie czytaj localhosta:
 - testapache1.pl
 - testapache2.pl

Aby Apache przekierowywał kolejno:
 - testapache1.pl na aplikacje w folderze  ../html/strona1
 - testapache2.pl na aplikacje w folderze  ../html/strona2
Musisz przejść do konfiguracji Apacha, znajduje się ona /etc/apache2/sites-enabled
      cd /etc/apache2/sites-enabled
Znajdują się tam dwa pliki:
 - 000-default.conf - który jest skrótem do pliku z katalogu /etc/apache2/sites-available
 - default-ssl.conf  - który jest również plikiem z virtualhost-ami lecz używamy go w gdy mamy wygenerowany certyfikat SSL dla naszej strony

Aktualnie interesuje nas plik 000-default.conf w otwieramy go za pomocą nano
      nano 000-default.conf
Po otwarciu aby dodać odpowiednie przekierowanie domeny do katalogu używamy jak już mówiłem virtualhost-a. 

Oto przykład takiego wpisu
       ServerName testapache1.pl
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html/strona1

       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
Już wyjaśniam co tutaj mamy.

 - Tag otwierający Virtualhost-a oraz "*:80" oznacza to, że serwer Apache nasłuchuje na wszystkich adresach IP (znak *) i na porcie 80
 - ServerName - tu wpisujemy naszą domenę
 - ServerAdmin - to miejsce określa adres e-mail administratora serwera
 - DocumentRoot - określa katalog w którym znajduje jest index naszej strony 
 - ErrorLog oraz CustomLog wskazuje miejsce gdzie mają być zapisywane komunikaty o błędach


 default-ssl.conf jest to plik który konfigurujemy w przypadku gdy mamy wygenerowany i wgrany na serwer z Apache certyfikat SSL.

Oto przykładowa klauzura jego konfiguracji
      
         
                ServerName testapache2.pl
                ServerAdmin webmaster@localhost

                DocumentRoot /var/www/html/strona2

                ErrorLog ${APACHE_LOG_DIR}/error.log
                
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                
                SSLEngine on
                
                SSLCertificateFile /etc/letsencrypt/live/testapache2.pl/cert.pem
                
                SSLCertificateKeyFile /etc/letsencrypt/live/testapache2.pl/privkey.pem
                
                SSLCertificateChainFile /etc/letsencrypt/live/testapache2.pl/chain.pem
                
                    SSLOptions +StdEnvVars
                
                
                    SSLOptions +StdEnvVars
                     
         
      
W tym przypadku virtualhost-y muszą znajdować się w tagu IfModule oraz sam virtualHost nasłuchuje po porcie 443 a nie 80.
Jest tak ponieważ port 80 to port dla protokołu HTTP a port 443 dla HTTPS który jest szyfrowaną wersją HTTP.

ServerName, ServerAdmin, DocumentRoot mają tą samą funkcje co w poprzednio.

Tak naprawdę kolejną ważną klauzurą jest SSLEngine on który uruchamia silnik dla tego czytania certyfikatów SSL.
Następne trzy linijki są niemniej ważne, wskazują one na lokalizacje trzech plików certyfikatu SSL (cert.pem, privkey.pem oraz chain.pem).

Tagi FilesMatch oraz Directory służą konfiguracji SSL, w wielkim skrócie, nie ruszamy tego.

Po poprawnym skonfigurowaniu mam dostęp do szyfrowanego połączenia z naszą stroną,
Lecz połączymy się z nią dopiero gdy ręcznie wpiszemy https://testapache2.pl
Przeglądarka sama nie wykryje czy odwiedzana strona posiada aktywne szyfrowane połączenie, dla tego musimy ustawić aby przekierowywało z połączenia 
NIE szyfrowanego na połączenie szyfrowane.
Robimy to za pomocą pliku .htaccess w katalogu naszego pliku index w tym przypadku /var/www/html/strona2
      cd /var/www/html/strona2
Tworzymy a następnie edytujemy plik .htaccess
      touch .htaccess
nano .htaccess
I dodajemy ten oto kod
      RewriteEngine On

      RewriteCond %{HTTPS} !=on

      RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
W tagu IfModule włączamy RewriteEngine oraz wpisujemy poniższy warunek.
Gdzie RewriteCond to warunek a RewriteRule to zasada która ma sie wykonać w przypadku gdy warunek jest spełniony

Teraz będzie nas automatycznie przekierowywać na HTTPS.


Zapewne teraz się głowisz dla czego to nie działa. Już spieszę z odpowiedzią!
Gdy robisz wpisy czy też je modyfikujesz w plikach 000-default.conf, default-ssl.conf musisz zrestartować swojego Apacha
      sudo systemctl restart apache2
Natomiast aby włączyć mod_rewrite w Apachu musisz wykonać tą komendę 
      sudo a2enmod rewrite
Voilà już wszystko działa